/*
 * cola.h
 *
 *  Created on: 30/09/2011
 *      Author: Power Rangers Turbo C
 */

#ifndef COLA_H_
#define COLA_H_
#define MALLOC_COLA (cola*)malloc(sizeof(cola))
#define ASCEN_INT compararAscendenteInt
#define DESCEN_INT compararDescendenteInt
#define ASCEN_PEDIDO compararAscendentePedido
#define DESCEN_PEDIDO compararDescendentePedido


/*Ejemplo:
 * cola *unaCola;
 * unaCola= MALLOC_COLA;
 * cola_inicializacionCola(UnaCola);
 */
// TIPOS DE DATO
enum operaciones {
	LECTURA = 1, ESCRITURA = 2, ESCRITURA_REFLEJO = 3
};
typedef struct pedido_s {
	    int cilindro;
		int cabeza;
		int sector;
		int operacion;
		int sectorLogicoDestino;
		char * contenedor;
} PEDIDO;
typedef struct nodoCola {
	void *dato;
	struct nodoCola *siguiente;
} cola_NODO;
typedef struct cola_s {
	int tamano;
	cola_NODO *primero;
	cola_NODO *ultimo;
} cola;
//LISTAS
void cola_listaInsertaNodo(cola_NODO *,void*,int(*comparar)(const void*, const void*));
void cola_listaSuprimeNodo(cola_NODO * ,void *,int(*comparar)(const void*, const void*));
cola_NODO *cola_listaBuscaNodo(cola_NODO *,void *);
//COLAS FIFO
void cola_inicializacionCola(cola *);
void cola_meterEnCola(cola *, void *);
void cola_sacarDeCola(cola *);
void *cola_primero(cola *);
void cola_ordenar(cola *, int(*comparar)(const void*, const void*));
// COMPARACION DE ENTEROS
int compararAscendenteInt(int *, int *);
int compararDescendenteInt(int *, int *);
// COMPARACION DE PEDIDOS
int compararAscendentePedido(PEDIDO *, PEDIDO *);
int compararDescendentePedido(PEDIDO *, PEDIDO *);

#endif /* COLA_H_ */
